home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / webxp040.lzh / Source / draw_mouse.s < prev    next >
Text File  |  1998-07-25  |  11KB  |  494 lines

  1. *    draw_mouse.s        â}âEâXâJü[â\âïè╓îW
  2.  
  3.     .xdef    draw_mouse_cursor
  4.     .xdef    show_mouse_cursor,hide_mouse_cursor
  5.     .xdef    _show_mouse_cursor,_hide_mouse_cursor
  6.     .xref    _ms_pos,_ms_pos_x,_ms_pos_y
  7.  
  8. TEXTVRAM    equ    $e0_0000
  9. CRTC_R21    equ    $e8_002a
  10. NEXT_LINE    equ    128    * éPâëâCâôéáé╜éΦé╠âoâCâgÉö
  11.  
  12.  
  13. *********************************************************
  14. draw_mouse_cursor:    * â}âEâXâJü[â\âïé≡ò`é¡
  15.             * âXü[âpü[é┼î─é╘é▒é╞
  16.             * in  : d0.w = âpâ^ü[âôö╘ìåüi< 0 é┼Å┴ïÄüj
  17.     movem.l    d1-d6/a0-a2,-(sp)
  18.  
  19.     move.w    d0,d6        * d6.w = âpâ^ü[âôö╘ìå
  20.  
  21.     move.w    CRTC_R21,-(sp)
  22.     move.w    #0,CRTC_R21    * ârâbâgâ}âXâNü^ô»Ä₧âAâNâZâXâIât
  23.  
  24.  
  25.  
  26.             * æOë±ò`éóé╜â}âEâXâJü[â\âïé≡Å┴é╖
  27.     move.l    old_ms_pos_ptr,d0    * Å┴ïÄé╖éΘòKùvé¬éáéΘé⌐üH
  28.     beq    draw_no_erase
  29.     movea.l    d0,a1            * a1.l = ò`ëµé╖éΘâAâhâîâX
  30.  
  31.     lea.l    ms_save,a0    * a0.l = ô]æùî│
  32.     moveq.l    #2-1,d0
  33. @@:
  34.     .irp    %A,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  35.     move.l    (a0)+,NEXT_LINE*%A(a1)
  36.     .endm
  37.  
  38.     adda.l    #$2_0000,a1
  39.     dbra    d0,@b
  40.  
  41. draw_no_erase:
  42.     clr.l    old_ms_pos_ptr
  43.     tst.w    d6        * < 0 é╚éτÅ┴ïÄé╠é▌
  44.     bmi    draw_mouse_cursor_rts
  45.  
  46.     tst.b    hide_level
  47.     bne    draw_mouse_cursor_rts
  48.  
  49.             * ò`ëµé╖éΘâAâhâîâXé╞ârâbâgê╩Æué≡ïüé▀éΘ
  50.     lea.l    ms_hot_spot_data,a0
  51.     move.w    d6,d0
  52.     lsl.w    #2,d0
  53.     move.w    2(a0,d0.w),d3    * d3.w = âzâbâgâXâ|âbâg y
  54.     move.w    (a0,d0.w),d2    * d2.w = âzâbâgâXâ|âbâg x
  55.  
  56.     moveq.l    #0,d1
  57.     move.w    _ms_pos_y,d1    * d1.w = y
  58.     sub.w    d3,d1
  59.     lsl.l    #7,d1        * 128 ö{
  60.     lea.l    TEXTVRAM+$4_0000,a1
  61.     adda.l    d1,a1
  62.     move.w    _ms_pos_x,d1    * d1.w = x
  63.     sub.w    d2,d1
  64.     move.w    d1,d2
  65.     lsr.w    #4,d1
  66.     add.w    d1,d1
  67.     add.w    d1,a1        * a1.l = ò`ëµé╖éΘâAâhâîâX
  68.     andi.w    #15,d2        * d2.w = ò`ëµé╖éΘârâbâgê╩Æu (0~15)
  69.     move.l    a1,old_ms_pos_ptr
  70.     move.w    d2,old_ms_pos_bit
  71.  
  72.  
  73.  
  74.             * TEXTVRAM é≡ò█æ╢é╖éΘ
  75.     lea.l    ms_save,a0    * a0.l = ô]æùɵ
  76.     moveq.l    #2-1,d0
  77. @@:
  78.     .irp    %A,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  79.     move.l    NEXT_LINE*%A(a1),(a0)+
  80.     .endm
  81.  
  82.     adda.l    #$2_0000,a1
  83.     dbra    d0,@b
  84.  
  85.  
  86.  
  87.             * â}âEâXâJü[â\âïé≡ò`ëµé╖éΘ
  88.     lea.l    ms_pat_data,a0
  89.     move.l    d6,d0        * â}âEâXâpâ^ü[âôö╘ìå
  90.     lsl.w    #6,d0
  91.     adda.w    d0,a0        * a0.l = ô]æùî│
  92.  
  93.     move.l    old_ms_pos_ptr,a1    * a1.l = ò`ëµé╖éΘâAâhâîâX
  94.     move.w    old_ms_pos_bit,d6    * d6.w = ò`ëµé╖éΘârâbâgê╩Æu (0~15)
  95.  
  96.     movea.l    a1,a2        * a1.l = ò`ëµé╖éΘâAâhâîâXüiéQâyü[âWû┌üj
  97.     adda.l    #$2_0000,a2    * a2.l = ò`ëµé╖éΘâAâhâîâXüiéRâyü[âWû┌üj
  98.  
  99.     moveq.l    #16-1,d5
  100. @@:
  101.     moveq.l    #0,d0
  102.     moveq.l    #0,d1
  103.     move.w    32(a0),d1
  104.     move.w    (a0)+,d0
  105.     swap.w    d0        * d0.l = Åæé½ì₧é▐âpâ^ü[âôüiéQâyü[âWû┌üj
  106.     swap.w    d1        * d1.l = Åæé½ì₧é▐âpâ^ü[âôüiéRâyü[âWû┌üjüòâ}âXâNâpâ^ü[âô
  107.  
  108.     move.l    (a1),d2        * d2.l = Åæé½ì₧é▐ TEXTVRAMüiéQâyü[âWû┌üj
  109.     move.l    (a2),d3        * d3.l =    üV      üiéRâyü[âWû┌üj
  110.  
  111.     lsr.l    d6,d0
  112.     lsr.l    d6,d1
  113.     move.l    d1,d4
  114.     not.l    d4        * d4.l = â}âXâNâpâ^ü[âô
  115.     and.l    d4,d2
  116.     or.l    d0,d2
  117.     move.l    d2,(a1)        *
  118.     and.l    d4,d3
  119.     or.l    d1,d3
  120.     move.l    d3,(a2)        *
  121.  
  122.     lea.l    NEXT_LINE(a1),a1
  123.     lea.l    NEXT_LINE(a2),a2
  124.     dbra    d5,@b
  125.  
  126.  
  127. draw_mouse_cursor_rts:
  128.     move.w    (sp)+,CRTC_R21
  129.  
  130.     movem.l    (sp)+,d1-d6/a0-a2
  131.     rts
  132.  
  133.  
  134. *********************************************************
  135. show_mouse_cursor:    * â}âEâXâJü[â\âïé≡ò\Īé╖éΘ
  136. _show_mouse_cursor:
  137.             * hide_mouse_cursor é╞âyâAé┼Ägéñ
  138.     move.b    hide_level,d0
  139.     beq    show_mouse_cursor_draw
  140.     subq.b    #1,d0
  141.     bne    show_mouse_cursor_not_draw
  142.     move.b    d0,hide_level
  143.     clr.l    old_ms_pos_ptr    * Å┴ïÄé╠òKùvé╚é╡
  144.  
  145. show_mouse_cursor_draw:
  146.     moveq.l    #0,d0        *! debug
  147.     bsr    draw_mouse_cursor
  148.  
  149.     bra    show_mouse_cursor_rts
  150.  
  151. show_mouse_cursor_not_draw:
  152.     move.b    d0,hide_level
  153.  
  154. show_mouse_cursor_rts:
  155.     rts
  156.  
  157. *********************************************************
  158. hide_mouse_cursor:    * â}âEâXâJü[â\âïé≡Å┴ïÄé╖éΘ
  159. _hide_mouse_cursor:
  160.         addq.b    #1,hide_level
  161.  
  162.     moveq.l    #-1,d0        * Å┴ïÄé╠é▌
  163.     bsr    draw_mouse_cursor
  164.  
  165.     rts
  166.  
  167.  
  168. *********************************************************
  169.     .data
  170.     .even
  171. ms_pat_data:
  172.             * âpâ^ü[âôéO
  173.     .dc.w    %00000001_10000000
  174.     .dc.w    %00000010_01000000
  175.     .dc.w    %00000100_00100000
  176.     .dc.w    %00001000_00010000
  177.     .dc.w    %00010000_00001000
  178.     .dc.w    %00100000_00000100
  179.     .dc.w    %01111111_11111110
  180.     .dc.w    %00000000_00000000
  181.     .dc.w    %01111111_11111110
  182.     .dc.w    %00100000_00000100
  183.     .dc.w    %00010000_00001000
  184.     .dc.w    %00001000_00010000
  185.     .dc.w    %00000100_00100000
  186.     .dc.w    %00000010_01000000
  187.     .dc.w    %00000001_10000000
  188.     .dc.w    %00000000_00000000
  189.  
  190.     .dc.w    %00000001_10000000
  191.     .dc.w    %00000011_11000000
  192.     .dc.w    %00000111_11100000
  193.     .dc.w    %00001111_11110000
  194.     .dc.w    %00011111_11111000
  195.     .dc.w    %00111111_11111100
  196.     .dc.w    %01111111_11111110
  197.     .dc.w    %00000000_00000000
  198.     .dc.w    %01111111_11111110
  199.     .dc.w    %00111111_11111100
  200.     .dc.w    %00011111_11111000
  201.     .dc.w    %00001111_11110000
  202.     .dc.w    %00000111_11100000
  203.     .dc.w    %00000011_11000000
  204.     .dc.w    %00000001_10000000
  205.     .dc.w    %00000000_00000000
  206.  
  207.             * âpâ^ü[âôéP
  208.     .dc.w    %10000000_00000000
  209.     .dc.w    %11000000_00000000
  210.     .dc.w    %10100000_00000000
  211.     .dc.w    %10010000_00000000
  212.     .dc.w    %10001000_00000000
  213.     .dc.w    %10000100_00000000
  214.     .dc.w    %10000010_00000000
  215.     .dc.w    %10000001_00000000
  216.     .dc.w    %10000000_10000000
  217.     .dc.w    %10000000_01000000
  218.     .dc.w    %10000000_00100000
  219.     .dc.w    %10001111_11110000
  220.     .dc.w    %10010000_00000000
  221.     .dc.w    %10100000_00000000
  222.     .dc.w    %11000000_00000000
  223.     .dc.w    %10000000_00000000
  224.  
  225.     .dc.w    %10000000_00000000
  226.     .dc.w    %11000000_00000000
  227.     .dc.w    %11100000_00000000
  228.     .dc.w    %11110000_00000000
  229.     .dc.w    %11111000_00000000
  230.     .dc.w    %11111100_00000000
  231.     .dc.w    %11111110_00000000
  232.     .dc.w    %11111111_00000000
  233.     .dc.w    %11111111_10000000
  234.     .dc.w    %11111111_11000000
  235.     .dc.w    %11111111_11100000
  236.     .dc.w    %11111111_11110000
  237.     .dc.w    %11110000_00000000
  238.     .dc.w    %11100000_00000000
  239.     .dc.w    %11000000_00000000
  240.     .dc.w    %10000000_00000000
  241.  
  242.             * âpâ^ü[âôéQ
  243.     .dc.w    %00000000_00000000
  244.     .dc.w    %00000000_00000000
  245.     .dc.w    %01111111_11111110
  246.     .dc.w    %00100000_00000100
  247.     .dc.w    %00100000_00000100
  248.     .dc.w    %00010000_00001000
  249.     .dc.w    %00010000_00001000
  250.     .dc.w    %00001000_00010000
  251.     .dc.w    %00001000_00010000
  252.     .dc.w    %00000100_00100000
  253.     .dc.w    %00000100_00100000
  254.     .dc.w    %00000010_01000000
  255.     .dc.w    %00000010_01000000
  256.     .dc.w    %00000001_10000000
  257.     .dc.w    %00000001_10000000
  258.     .dc.w    %00000000_00000000
  259.  
  260.     .dc.w    %00000000_00000000
  261.     .dc.w    %00000000_00000000
  262.     .dc.w    %01111111_11111110
  263.     .dc.w    %00111111_11111100
  264.     .dc.w    %00111111_11111100
  265.     .dc.w    %00011111_11111000
  266.     .dc.w    %00011111_11111000
  267.     .dc.w    %00001111_11110000
  268.     .dc.w    %00001111_11110000
  269.     .dc.w    %00000111_11100000
  270.     .dc.w    %00000111_11100000
  271.     .dc.w    %00000011_11000000
  272.     .dc.w    %00000011_11000000
  273.     .dc.w    %00000001_10000000
  274.     .dc.w    %00000001_10000000
  275.     .dc.w    %00000000_00000000
  276.  
  277.             * âpâ^ü[âôéR
  278.     .dc.w    %00000000_00000000
  279.     .dc.w    %00000001_10000000
  280.     .dc.w    %00000001_10000000
  281.     .dc.w    %00000010_01000000
  282.     .dc.w    %00000010_01000000
  283.     .dc.w    %00000100_00100000
  284.     .dc.w    %00000100_00100000
  285.     .dc.w    %00001000_00010000
  286.     .dc.w    %00001000_00010000
  287.     .dc.w    %00010000_00001000
  288.     .dc.w    %00010000_00001000
  289.     .dc.w    %00100000_00000100
  290.     .dc.w    %00100000_00000100
  291.     .dc.w    %01111111_11111110
  292.     .dc.w    %00000000_00000000
  293.     .dc.w    %00000000_00000000
  294.  
  295.     .dc.w    %00000000_00000000
  296.     .dc.w    %00000001_10000000
  297.     .dc.w    %00000001_10000000
  298.     .dc.w    %00000011_11000000
  299.     .dc.w    %00000011_11000000
  300.     .dc.w    %00000111_11100000
  301.     .dc.w    %00000111_11100000
  302.     .dc.w    %00001111_11110000
  303.     .dc.w    %00001111_11110000
  304.     .dc.w    %00011111_11111000
  305.     .dc.w    %00011111_11111000
  306.     .dc.w    %00111111_11111100
  307.     .dc.w    %00111111_11111100
  308.     .dc.w    %01111111_11111110
  309.     .dc.w    %00000000_00000000
  310.     .dc.w    %00000000_00000000
  311.  
  312.             * âpâ^ü[âôéS
  313.     .dc.w    %11111111_11111111
  314.     .dc.w    %01000000_00000010
  315.     .dc.w    %00100000_00000100
  316.     .dc.w    %00010000_00001000
  317.     .dc.w    %00001000_00010000
  318.     .dc.w    %00000100_00100000
  319.     .dc.w    %00000010_01000000
  320.     .dc.w    %00000001_10000000
  321.     .dc.w    %11111111_11111111
  322.     .dc.w    %01000000_00000010
  323.     .dc.w    %00100000_00000100
  324.     .dc.w    %00010000_00001000
  325.     .dc.w    %00001000_00010000
  326.     .dc.w    %00000100_00100000
  327.     .dc.w    %00000010_01000000
  328.     .dc.w    %00000001_10000000
  329.  
  330.     .dc.w    %11111111_11111111
  331.     .dc.w    %01111111_11111110
  332.     .dc.w    %00111111_11111100
  333.     .dc.w    %00011111_11111000
  334.     .dc.w    %00001111_11110000
  335.     .dc.w    %00000111_11100000
  336.     .dc.w    %00000011_11000000
  337.     .dc.w    %00000001_10000000
  338.     .dc.w    %11111111_11111111
  339.     .dc.w    %01111111_11111110
  340.     .dc.w    %00111111_11111100
  341.     .dc.w    %00011111_11111000
  342.     .dc.w    %00001111_11110000
  343.     .dc.w    %00000111_11100000
  344.     .dc.w    %00000011_11000000
  345.     .dc.w    %00000001_10000000
  346.  
  347.             * âpâ^ü[âôéT
  348.     .dc.w    %00000001_10000000
  349.     .dc.w    %00000010_01000000
  350.     .dc.w    %00000100_00100000
  351.     .dc.w    %00001000_00010000
  352.     .dc.w    %00010000_00001000
  353.     .dc.w    %00100000_00000100
  354.     .dc.w    %01000000_00000010
  355.     .dc.w    %11111111_11111111
  356.     .dc.w    %00000001_10000000
  357.     .dc.w    %00000010_01000000
  358.     .dc.w    %00000100_00100000
  359.     .dc.w    %00001000_00010000
  360.     .dc.w    %00010000_00001000
  361.     .dc.w    %00100000_00000100
  362.     .dc.w    %01000000_00000010
  363.     .dc.w    %11111111_11111111
  364.  
  365.     .dc.w    %00000001_10000000
  366.     .dc.w    %00000011_11000000
  367.     .dc.w    %00000111_11100000
  368.     .dc.w    %00001111_11110000
  369.     .dc.w    %00011111_11111000
  370.     .dc.w    %00111111_11111100
  371.     .dc.w    %01111111_11111110
  372.     .dc.w    %11111111_11111111
  373.     .dc.w    %00000001_10000000
  374.     .dc.w    %00000011_11000000
  375.     .dc.w    %00000111_11100000
  376.     .dc.w    %00001111_11110000
  377.     .dc.w    %00011111_11111000
  378.     .dc.w    %00111111_11111100
  379.     .dc.w    %01111111_11111110
  380.     .dc.w    %11111111_11111111
  381.  
  382.             * âpâ^ü[âôéU
  383.     .dc.w    %10000000_00000001
  384.     .dc.w    %11000000_00000011
  385.     .dc.w    %10100000_00000101
  386.     .dc.w    %10010000_00001001
  387.     .dc.w    %10001000_00010001
  388.     .dc.w    %10000100_00100001
  389.     .dc.w    %10000010_01000001
  390.     .dc.w    %10000001_10000001
  391.     .dc.w    %10000010_01000001
  392.     .dc.w    %10000100_00100001
  393.     .dc.w    %10001000_00010001
  394.     .dc.w    %10010000_00001001
  395.     .dc.w    %10100000_00000101
  396.     .dc.w    %11000000_00000011
  397.     .dc.w    %10000000_00000001
  398.     .dc.w    %00000000_00000000
  399.  
  400.     .dc.w    %10000000_00000001
  401.     .dc.w    %11000000_00000011
  402.     .dc.w    %11100000_00000111
  403.     .dc.w    %11110000_00001111
  404.     .dc.w    %11111000_00011111
  405.     .dc.w    %11111100_00111111
  406.     .dc.w    %11111110_01111111
  407.     .dc.w    %11111111_11111111
  408.     .dc.w    %11111110_01111111
  409.     .dc.w    %11111100_00111111
  410.     .dc.w    %11111000_00011111
  411.     .dc.w    %11110000_00001111
  412.     .dc.w    %11100000_00000111
  413.     .dc.w    %11000000_00000011
  414.     .dc.w    %10000000_00000001
  415.     .dc.w    %00000000_00000000
  416.  
  417.             * âpâ^ü[âôéV
  418.     .dc.w    %00000111_11100000
  419.     .dc.w    %00011000_00011000
  420.     .dc.w    %00100011_11000100
  421.     .dc.w    %01001100_00100010
  422.     .dc.w    %01010000_01001010
  423.     .dc.w    %10010000_10010101
  424.     .dc.w    %10100001_00100101
  425.     .dc.w    %10100010_01000101
  426.     .dc.w    %10100100_10000101
  427.     .dc.w    %10101001_00000101
  428.     .dc.w    %10010010_00001001
  429.     .dc.w    %01000100_00001010
  430.     .dc.w    %01001100_00110010
  431.     .dc.w    %00100011_11000100
  432.     .dc.w    %00011000_00011000
  433.     .dc.w    %00000111_11100000
  434.  
  435.     .dc.w    %00000111_11100000
  436.     .dc.w    %00011111_11111000
  437.     .dc.w    %00111111_11111100
  438.     .dc.w    %01111100_00111110
  439.     .dc.w    %01110000_01111110
  440.     .dc.w    %11110000_11110111
  441.     .dc.w    %11100001_11100111
  442.     .dc.w    %11100011_11000111
  443.     .dc.w    %11100111_10000111
  444.     .dc.w    %11101111_00000111
  445.     .dc.w    %11111110_00001111
  446.     .dc.w    %01111100_00001110
  447.     .dc.w    %01111100_00111110
  448.     .dc.w    %00111111_11111100
  449.     .dc.w    %00011111_11111000
  450.     .dc.w    %00000111_11100000
  451.  
  452.  
  453. .if    0
  454.     .dc.w    %00000000_00000000
  455.     .dc.w    %00000000_00000000
  456.     .dc.w    %00000000_00000000
  457.     .dc.w    %00000000_00000000
  458.     .dc.w    %00000000_00000000
  459.     .dc.w    %00000000_00000000
  460.     .dc.w    %00000000_00000000
  461.     .dc.w    %00000000_00000000
  462.     .dc.w    %00000000_00000000
  463.     .dc.w    %00000000_00000000
  464.     .dc.w    %00000000_00000000
  465.     .dc.w    %00000000_00000000
  466.     .dc.w    %00000000_00000000
  467.     .dc.w    %00000000_00000000
  468.     .dc.w    %00000000_00000000
  469.     .dc.w    %00000000_00000000
  470. .endif
  471.  
  472. ms_hot_spot_data:
  473.     .dc.w    7,7
  474.     .dc.w    0,0
  475.     .dc.w    7,7
  476.     .dc.w    7,7
  477.     .dc.w    7,7
  478.     .dc.w    7,7
  479.  
  480.     .even
  481.  
  482.  
  483.  
  484.     .bss
  485.     .even
  486.  
  487. old_ms_pos_ptr:    .ds.l    1
  488. old_ms_pos_bit:    .ds.w    1
  489. ms_save:    .ds.l    16*2    * TEXTVRAM é≡ò█æ╢é╖éΘâÅü[âN
  490. hide_level:    .ds.b    1    * â}âEâXö±ò\Īâîâxâï
  491.                 * = 0 é┼ò\Ī
  492.                 * > 0 é┼ö±ò\Īüi_HideMousCursor é¬î─é╬éΩéΘôxé╔ +1üj
  493.     .even
  494.